package at.horario.dao.hibernate;

import at.horario.dao.TurmaDao;
import at.horario.model.Horario;
import at.horario.model.Turma;
import org.hibernate.criterion.DetachedCriteria;
import static org.hibernate.criterion.DetachedCriteria.forClass;
import static org.hibernate.criterion.Projections.rowCount;
import static org.hibernate.criterion.Restrictions.eq;

import java.util.List;

public class TurmaDaoHibernate extends GenericDaoHibernate<Turma, Long> implements TurmaDao {
    public TurmaDaoHibernate() {
        super(Turma.class);
    }

    public Turma findBy(Horario horario, int numHorario) {
        DetachedCriteria criteria = forClass(Turma.class);
        criteria.add(eq("horario", horario))
                .add(eq("numHorario", numHorario));

        List lista = super.getHibernateTemplate().findByCriteria(criteria, 0, 1);
        return lista.isEmpty() ? null : (Turma) lista.get(0);
    }

    /**
     * @param horario hor�rio o qual queremos determinar o n�mero de turmas
     * @return retorna o n�mero de turmas
     */
    public int countTurmas(Horario horario) {
        DetachedCriteria criteria = criteria();
        criteria.add(eq("horario", horario));
        criteria.setProjection(rowCount());
        Object ret = getHibernateTemplate().findByCriteria(criteria).get(0);
        return (Integer) ret;
    }
}